﻿using System;
using System.Collections.Generic;
using System.ServiceModel;
using Informant.Services.Models.SmsMessaging;

namespace Informant.Services.SmsMessaging
{
	public interface ISmsServiceCallback
	{
		/// <summary>
		/// Callback for logging on the sms service.
		/// </summary>
		/// <param name="loggedOn">if set to <c>true</c> [logged on].</param>
		[OperationContract(IsOneWay = true)]
		void LogOnSmsServiceCallback(Boolean loggedOn);
		/// <summary>
		/// Callback for logging off the sms service.
		/// </summary>
		/// <param name="loggedOff">if set to <c>true</c> [logged off].</param>
		[OperationContract(IsOneWay = true)]
		void LogOffSmsServiceCallback(Boolean loggedOff);
		/// <summary>
		/// Callback for deleting an SMS.
		/// </summary>
		/// <param name="smsId">The SMS id.</param>
		/// <param name="deleted">if set to <c>true</c> [deleted].</param>
		[OperationContract(IsOneWay = true)]
		void DeleteSmsCallback(String smsId, Boolean deleted);
		/// <summary>
		/// Callback for marking the SMS as read.
		/// </summary>
		/// <param name="smsId">The SMS id.</param>
		/// <param name="isRead">if set to <c>true</c> [is read].</param>
		[OperationContract(IsOneWay = true)]
		void MarkReadSmsCallback(String smsId, Boolean isRead);
		/// <summary>
		/// Callback for retrieving all SMS.
		/// </summary>
		/// <param name="allSms">All SMS.</param>
		[OperationContract(IsOneWay = true)]
		void RetrieveAllSmsCallback(IEnumerable<SmsServiceModel> allSms);
		/// <summary>
		/// Callback for sending SMS.
		/// </summary>
		/// <param name="successful">if set to <c>true</c> [successful].</param>
		[OperationContract(IsOneWay = true)]
		void SendSmsCallback(Boolean successful);
		/// <summary>
		/// Callback for current status of the Sms.
		/// </summary>
		/// <param name="sent">The sent.</param>
		/// <param name="total">The total.</param>
		[OperationContract(IsOneWay = true)]
		void SendSmsProgressCallback(Int32 sent, Int32 failed, Int32 total);
	}
}
